﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using ClasesLibreria.dominio;

namespace ClasesLibreria.dao
{
    public static class DAOUsuarios
    {
        public static Usuario getUsuarioByNombre(string nombreUsuario, string connectionString)
        {
            Usuario usuario;
            SqlConnection conn;
            SqlCommand cmd;
            SqlDataReader dr;

            conn = new SqlConnection();
            conn.ConnectionString = connectionString;
            conn.Open();
            cmd = new SqlCommand("SELECT usuario.IdUsuario, usuario.NombreUsuario, usuario.Legajo, usuario.IdRol, Contraseña, Rol.Nombre as NombreRol FROM usuario, Rol WHERE usuario.NombreUsuario = @NombreUsuario AND usuario.IdRol = Rol.IdRol");
            cmd.Connection = conn;
            cmd.Parameters.Add(new SqlParameter("@NombreUsuario", nombreUsuario));
            dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                usuario = new Usuario();
                usuario.IdUsuario = int.Parse(dr["IdUsuario"].ToString());
                usuario.NombreUsuario = dr["NombreUsuario"].ToString();
                usuario.Legajo = int.Parse(dr["Legajo"].ToString());
                Rol rol = new Rol();
                rol.IdRol = int.Parse(dr["IdRol"].ToString());
                rol.Nombre = dr["NombreRol"].ToString();
                usuario.IdRol = rol;
                usuario.Contraseña = dr["Contraseña"].ToString();
                return usuario;
            }
            return null;
        }

        public static SqlDataReader queryUsuarios(string connectionString)
        {
            SqlConnection conn;
            SqlCommand cmd;
            SqlDataReader dr;

            conn = new SqlConnection();
            conn.ConnectionString = connectionString;
            conn.Open();
            cmd = new SqlCommand("SELECT IdUsuario, NombreUsuario, Legajo, IdRol, Contraseña FROM usuario ORDER BY IdUsuario");
            cmd.Connection = conn;
            dr = cmd.ExecuteReader();

            return dr;
        }

        /**
         * 
         */
        public static List<Usuario> getUsuarios(string connectionString)
        {
            List<Usuario> usuarios = new List<Usuario>();
            SqlConnection conn;
            SqlCommand cmd;
            SqlDataReader dr;

            conn = new SqlConnection();
            conn.ConnectionString = connectionString;
            conn.Open();
            cmd = new SqlCommand("SELECT IdUsuario, NombreUsuario, Legajo, IdRol, Contraseña FROM usuario ORDER BY IdUsuario");
            cmd.Connection = conn;
            dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                Usuario usuario = new Usuario();
                usuario.IdUsuario = int.Parse(dr["IdUsuario"].ToString());
                usuario.NombreUsuario = dr["NombreUsuario"].ToString();
                usuario.Legajo = int.Parse(dr["Legajo"].ToString());
                Rol rol = new Rol();
                rol.IdRol = int.Parse(dr["IdRol"].ToString());
                usuario.IdRol = rol;
                usuario.Contraseña = dr["Contraseña"].ToString();
                usuarios.Add(usuario);
            }
            return usuarios;
        }


        public static void insertarUsuario(Usuario usuario, string connectionString)
        {
            SqlConnection conn;
            SqlCommand cmd;

            conn = new SqlConnection();
            conn.ConnectionString = connectionString;
            conn.Open();
            SqlTransaction tran = conn.BeginTransaction();
            try
            {
                cmd = new SqlCommand("insert into usuario (NombreUsuario,Legajo, " +
                " IdRol,Contraseña)values (@NombreUsuario,@Legajo,@IdRol,@Contraseña)");
                cmd.Connection = conn;

                cmd.Parameters.Add(new SqlParameter("@NombreUsuario", usuario.NombreUsuario));
                cmd.Parameters.Add(new SqlParameter("@Legajo", usuario.Legajo));
                cmd.Parameters.Add(new SqlParameter("@IdRol", usuario.IdRol.IdRol));
                cmd.Parameters.Add(new SqlParameter("@Contraseña", usuario.Contraseña));
                cmd.Transaction = tran;
                int registrosAfectados = cmd.ExecuteNonQuery();

                tran.Commit();
            }
            catch
            {
                tran.Rollback();
            }
            finally
            {
                conn.Close();
            }

        }

        public static void borrarUsuario(Usuario usuario, string connectionString)
        {
            SqlConnection conn;
            SqlCommand cmd;

            conn = new SqlConnection();
            conn.ConnectionString = connectionString;
            conn.Open();

            cmd = new SqlCommand("delete usuario where IdUsuario = @idUsuario");
            cmd.Connection = conn;

            cmd.Parameters.Add(new SqlParameter("@idUsuario", usuario.IdUsuario));
            int RegistrosAfectados = cmd.ExecuteNonQuery();
            conn.Close();
        }
        public static void actualizaUsuario(Usuario usuario, string connectionString)
        {
            SqlConnection conn;
            SqlCommand cmd;

            conn = new SqlConnection();
            conn.ConnectionString = connectionString;
            conn.Open();

            cmd = new SqlCommand("UPDATE usuario " +
            "SET NombreUsuario = @nombreUsuario, " +
            "Legajo = @legajo, " +
            "IdRol = @idRol, " +
            "Contraseña = @contraseña " +
            "WHERE IdUsuario = @idUsuario"
            );

            cmd.Connection = conn;

            cmd.Parameters.Add(new SqlParameter("@nombreUsuario", usuario.NombreUsuario));
            cmd.Parameters.Add(new SqlParameter("@legajo", usuario.Legajo));
            cmd.Parameters.Add(new SqlParameter("@idRol", usuario.IdRol.IdRol));
            cmd.Parameters.Add(new SqlParameter("@contraseña", usuario.Contraseña));
            cmd.Parameters.Add(new SqlParameter("@idUsuario", usuario.IdUsuario));


            int RegistrosAfectados = cmd.ExecuteNonQuery();
            conn.Close();
        }

    }
}
